package br.urca.controller;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Result;
import br.urca.dao.DisciplinaDAO;
import br.urca.dao.DisciplinasMatriculadasDAO;
import br.urca.dao.OfertaDAO;
import br.urca.interceptor.InterceptResource;
import br.urca.model.Disciplina;
import br.urca.model.DisciplinaMatriculada;
import br.urca.model.HistoricoDisciplina;
import br.urca.model.Oferta;
import br.urca.session.UsuarioLogado;

@Controller
@InterceptResource
public class ConsultaMatriculaController {
	
	private Result result;
	private DisciplinasMatriculadasDAO mMatriculasDAO;
	private OfertaDAO mOfertaDAO;
	private DisciplinaDAO mDisciplinaDAO;
	private UsuarioLogado mUsuarioLogado;
	
	public ConsultaMatriculaController(){ }

	@Inject
	public ConsultaMatriculaController(Result result,
			DisciplinasMatriculadasDAO mMatriculasDAO,
			UsuarioLogado mUsuarioLogado, OfertaDAO mOfertaDAO,
			DisciplinaDAO mDisciplinaDAO) {
		super();
		this.result = result;
		this.mOfertaDAO = mOfertaDAO;
		this.mDisciplinaDAO = mDisciplinaDAO;
		this.mMatriculasDAO = mMatriculasDAO;
		this.mUsuarioLogado = mUsuarioLogado;
	}
	
	@Path("/matriculas")
	public void index() { }
	
	public void buscar() {
		
		String matricula = mUsuarioLogado.getAluno().getMatricula();
			
		if (matricula != null) {
			try { 
				List<HistoricoDisciplina> mListDisciplinas = new ArrayList<HistoricoDisciplina>();
				HistoricoDisciplina hd;
				
				List<DisciplinaMatriculada> mList = this.mMatriculasDAO.buscarPorMatricula(matricula);
				
				for(DisciplinaMatriculada d: mList) {
						
					Oferta mOferta = null;
					Disciplina mdDisciplina = null;
					
					mOferta = mOfertaDAO.buscarPorOfertaPedido(
							d.getId().getCodOferta(), d.getId().getCodPedido());
					if (mOferta != null)
						mdDisciplina = mDisciplinaDAO.buscarPorId(
								mOferta.getCodDisciplina());
					
					hd = new HistoricoDisciplina();
					
					hd.setCodDisciplina((mOferta != null ? mOferta.getCodDisciplina() : ""));
					hd.setCreditos((mOferta != null ? mOferta.getTotalCreditos() : ""));
					
					hd.setNomeDisciplina(
							(mdDisciplina != null ? mdDisciplina.getNomeDisciplina() : "" ));
					
					hd.setCodOferta(d.getId().getCodOferta());
					hd.setCodPedido(d.getId().getCodPedido());						
					hd.setMedia(d.getMedia());
					hd.setNotaAV1(d.getNotaAV1());
					hd.setNotaAV2(d.getNotaAV2());
					hd.setNotaAVF(d.getNotaAVF());
					hd.setSituacao(d.getSituacao().getDescricao());
					
					mListDisciplinas.add(hd);
					
				}			
				
				this.result.include("listaMatriculas", 
							mListDisciplinas)
							.include("matricula", matricula)
							.include("aluno", mUsuarioLogado.getAluno().getAluno().getNome())
							.redirectTo(this).index();
			} catch(Exception e) {
				this.result.include("mensagem","Matrícula inválida!")
					.redirectTo(this).index();
			}
		} else {
			this.result.include("mensagem","Matrícula não foi informada!")
				.redirectTo(this).index();
		}
	}
	
	

}
